expose gtk_bindings_activate_event(), changed callers.
authorTim Janik <timj@gtk.org>
Tue, 2 Mar 2004 00:04:36 +0000 (00:04 +0000)
committerTim Janik <timj@src.gnome.org>
Tue, 2 Mar 2004 00:04:36 +0000 (00:04 +0000)
Mon Mar  1 23:52:15 2004  Tim Janik  <timj@gtk.org>

        * gtk/gtkbindings.[hc]: expose gtk_bindings_activate_event(), changed
        callers.

        * gtk/gtkwindow.[hc]: added gtk_window_propagate_key_event() to expose
        the key event propagation mechanism used for focus widgets.
        (gtk_window_key_release_event): use the same key event propagation logic
        as gtk_window_key_press_event().

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkbindings.c
gtk/gtkbindings.h
gtk/gtkmenushell.c
gtk/gtkwidget.c
gtk/gtkwindow.c
gtk/gtkwindow.h

index 18664d8df0d03424472679b0e8c7b5459175f7be..20c3324310accbc420e1fdaccd8f5b94f8000d92 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Mon Mar  1 23:52:15 2004  Tim Janik  <timj@gtk.org>
+
+        * gtk/gtkbindings.[hc]: expose gtk_bindings_activate_event(), changed
+        callers.
+
+        * gtk/gtkwindow.[hc]: added gtk_window_propagate_key_event() to expose
+        the key event propagation mechanism used for focus widgets.
+        (gtk_window_key_release_event): use the same key event propagation logic
+        as gtk_window_key_press_event().
+
 2004-03-01  Simon Budig  <simon@gimp.org>
 
        * gdk/x11/gdkinput-x11.c: X11 R6.4 specifies 15 events
index 18664d8df0d03424472679b0e8c7b5459175f7be..20c3324310accbc420e1fdaccd8f5b94f8000d92 100644 (file)
@@ -1,3 +1,13 @@
+Mon Mar  1 23:52:15 2004  Tim Janik  <timj@gtk.org>
+
+        * gtk/gtkbindings.[hc]: expose gtk_bindings_activate_event(), changed
+        callers.
+
+        * gtk/gtkwindow.[hc]: added gtk_window_propagate_key_event() to expose
+        the key event propagation mechanism used for focus widgets.
+        (gtk_window_key_release_event): use the same key event propagation logic
+        as gtk_window_key_press_event().
+
 2004-03-01  Simon Budig  <simon@gimp.org>
 
        * gdk/x11/gdkinput-x11.c: X11 R6.4 specifies 15 events
index 18664d8df0d03424472679b0e8c7b5459175f7be..20c3324310accbc420e1fdaccd8f5b94f8000d92 100644 (file)
@@ -1,3 +1,13 @@
+Mon Mar  1 23:52:15 2004  Tim Janik  <timj@gtk.org>
+
+        * gtk/gtkbindings.[hc]: expose gtk_bindings_activate_event(), changed
+        callers.
+
+        * gtk/gtkwindow.[hc]: added gtk_window_propagate_key_event() to expose
+        the key event propagation mechanism used for focus widgets.
+        (gtk_window_key_release_event): use the same key event propagation logic
+        as gtk_window_key_press_event().
+
 2004-03-01  Simon Budig  <simon@gimp.org>
 
        * gdk/x11/gdkinput-x11.c: X11 R6.4 specifies 15 events
index 18664d8df0d03424472679b0e8c7b5459175f7be..20c3324310accbc420e1fdaccd8f5b94f8000d92 100644 (file)
@@ -1,3 +1,13 @@
+Mon Mar  1 23:52:15 2004  Tim Janik  <timj@gtk.org>
+
+        * gtk/gtkbindings.[hc]: expose gtk_bindings_activate_event(), changed
+        callers.
+
+        * gtk/gtkwindow.[hc]: added gtk_window_propagate_key_event() to expose
+        the key event propagation mechanism used for focus widgets.
+        (gtk_window_key_release_event): use the same key event propagation logic
+        as gtk_window_key_press_event().
+
 2004-03-01  Simon Budig  <simon@gimp.org>
 
        * gdk/x11/gdkinput-x11.c: X11 R6.4 specifies 15 events
index 18664d8df0d03424472679b0e8c7b5459175f7be..20c3324310accbc420e1fdaccd8f5b94f8000d92 100644 (file)
@@ -1,3 +1,13 @@
+Mon Mar  1 23:52:15 2004  Tim Janik  <timj@gtk.org>
+
+        * gtk/gtkbindings.[hc]: expose gtk_bindings_activate_event(), changed
+        callers.
+
+        * gtk/gtkwindow.[hc]: added gtk_window_propagate_key_event() to expose
+        the key event propagation mechanism used for focus widgets.
+        (gtk_window_key_release_event): use the same key event propagation logic
+        as gtk_window_key_press_event().
+
 2004-03-01  Simon Budig  <simon@gimp.org>
 
        * gdk/x11/gdkinput-x11.c: X11 R6.4 specifies 15 events
index b5cacbea3de45667053cd12c0a09e0ad7c05d409..9deafaed7424179df667633df9da4e3e3dceadcf 100644 (file)
@@ -1102,7 +1102,7 @@ gtk_bindings_activate (GtkObject      *object,
 }
 
 /**
- * _gtk_bindings_activate_event:
+ * gtk_bindings_activate_event:
  * @object: a #GtkObject (generally must be a widget)
  * @event: a #GdkEventKey
  * 
@@ -1112,8 +1112,8 @@ gtk_bindings_activate (GtkObject      *object,
  * Return value: %TRUE if a matching key binding was found
  **/
 gboolean
-_gtk_bindings_activate_event (GtkObject      *object,
-                             GdkEventKey    *event)
+gtk_bindings_activate_event (GtkObject      *object,
+                             GdkEventKey    *event)
 {
   GSList *entries = NULL;
   GdkDisplay *display;
index 5d4549582222cc7cb46140016a374d863b2f4165..2d57d5b049613c005bed6298b58dd1c2e4f5279b 100644 (file)
@@ -136,7 +136,7 @@ void         gtk_binding_entry_add_signall  (GtkBindingSet  *binding_set,
 guint   gtk_binding_parse_binding      (GScanner       *scanner);
 
 
-gboolean _gtk_bindings_activate_event (GtkObject   *object,
+gboolean gtk_bindings_activate_event  (GtkObject   *object,
                                       GdkEventKey *event);
 void     _gtk_binding_reset_parsed    (void);
 
index b90709152355a525fa23ca14c45583a5c248f4d2..b5e57c21f17395829be8616451a62e54b162420c 100644 (file)
@@ -580,7 +580,7 @@ gtk_menu_shell_key_press (GtkWidget *widget,
   if (!menu_shell->active_menu_item && menu_shell->parent_menu_shell)
     return gtk_widget_event (menu_shell->parent_menu_shell, (GdkEvent *)event);
   
-  if (_gtk_bindings_activate_event (GTK_OBJECT (widget), event))
+  if (gtk_bindings_activate_event (GTK_OBJECT (widget), event))
     return TRUE;
 
   toplevel = gtk_widget_get_toplevel (widget);
index 80be7ebff4f16977272f9671f865e18337b7f3c0..a50b1e8501dd3989c62e7bea655552469b8bbcce 100644 (file)
@@ -3303,14 +3303,14 @@ static gboolean
 gtk_widget_real_key_press_event (GtkWidget         *widget,
                                 GdkEventKey       *event)
 {
-  return _gtk_bindings_activate_event (GTK_OBJECT (widget), event);
+  return gtk_bindings_activate_event (GTK_OBJECT (widget), event);
 }
 
 static gboolean
 gtk_widget_real_key_release_event (GtkWidget         *widget,
                                   GdkEventKey       *event)
 {
-  return _gtk_bindings_activate_event (GTK_OBJECT (widget), event);
+  return gtk_bindings_activate_event (GTK_OBJECT (widget), event);
 }
 
 static gboolean
index 034edf240a4249b461a15a0cabf61a24299d2ed8..81b5b37909d1292b90149216e5f972cfef84e34c 100644 (file)
@@ -4183,53 +4183,75 @@ _gtk_window_query_nonaccels (GtkWindow      *window,
   return FALSE;
 }
 
+/**
+ * gtk_window_propagate_key_event:
+ * @window:  a #GtkWindow
+ * @event:   a #GdkEventKey
+ *
+ * Propagate a key press or release event to the focus widget and
+ * up the focus container chain until a widget handles @event.
+ * This is normally called by the default ::key_press_event and
+ * ::key_release_event handlers for toplevel windows,
+ * however in some cases it may be useful to call this directly when
+ * overriding the standard key handling for a toplevel window.
+ *
+ * Return value: %TRUE if a widget in the focus chain handled the event.
+ **/
+gboolean
+gtk_window_propagate_key_event (GtkWindow        *window,
+                                GdkEventKey      *event)
+{
+  gboolean handled = FALSE;
+  GtkWidget *widget, *focus;
+
+  g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);
+
+  widget = GTK_WIDGET (window);
+  focus = window->focus_widget;
+  if (focus)
+    g_object_ref (focus);
+  
+  while (!handled &&
+         focus && focus != widget &&
+         gtk_widget_get_toplevel (focus) == widget)
+    {
+      GtkWidget *parent;
+      
+      if (GTK_WIDGET_IS_SENSITIVE (focus))
+        handled = gtk_widget_event (focus, (GdkEvent*) event);
+      
+      parent = focus->parent;
+      if (parent)
+        g_object_ref (parent);
+      
+      g_object_unref (focus);
+      
+      focus = parent;
+    }
+  
+  if (focus)
+    g_object_unref (focus);
+
+  return handled;
+}
+
 static gint
 gtk_window_key_press_event (GtkWidget   *widget,
                            GdkEventKey *event)
 {
-  GtkWindow *window;
-  GtkWidget *focus;
-  gboolean handled;
-
-  window = GTK_WINDOW (widget);
-
-  handled = FALSE;
+  GtkWindow *window = GTK_WINDOW (widget);
+  gboolean handled = FALSE;
 
-  /* Check for mnemonics and accelerators
-   */
+  /* handle mnemonics and accelerators */
   if (!handled)
     handled = gtk_window_activate_key (window, event);
 
+  /* handle focus widget key events */
   if (!handled)
-    {
-      focus = window->focus_widget;
-      if (focus)
-       g_object_ref (focus);
-      
-      while (!handled &&
-            focus && focus != widget &&
-            gtk_widget_get_toplevel (focus) == widget)
-       {
-         GtkWidget *parent;
-         
-         if (GTK_WIDGET_IS_SENSITIVE (focus))
-           handled = gtk_widget_event (focus, (GdkEvent*) event);
-         
-         parent = focus->parent;
-         if (parent)
-           g_object_ref (parent);
-         
-         g_object_unref (focus);
-         
-         focus = parent;
-       }
-
-      if (focus)
-       g_object_unref (focus);
-    }
+    handled = gtk_window_propagate_key_event (window, event);
 
   /* Chain up, invokes binding set */
-  if (!handled && GTK_WIDGET_CLASS (parent_class)->key_press_event)
+  if (!handled)
     handled = GTK_WIDGET_CLASS (parent_class)->key_press_event (widget, event);
 
   return handled;
@@ -4239,20 +4261,16 @@ static gint
 gtk_window_key_release_event (GtkWidget   *widget,
                              GdkEventKey *event)
 {
-  GtkWindow *window;
-  gint handled;
-  
-  window = GTK_WINDOW (widget);
-  handled = FALSE;
-  if (window->focus_widget &&
-      window->focus_widget != widget &&
-      GTK_WIDGET_SENSITIVE (window->focus_widget))
-    {
-      handled = gtk_widget_event (window->focus_widget, (GdkEvent*) event);
-    }
+  GtkWindow *window = GTK_WINDOW (widget);
+  gboolean handled = FALSE;
+
+  /* handle focus widget key events */
+  if (!handled)
+    handled = gtk_window_propagate_key_event (window, event);
 
-  if (!handled && GTK_WIDGET_CLASS (parent_class)->key_release_event)
-    handled = GTK_WIDGET_CLASS (parent_class)->key_release_event (widget, event);
+  /* Chain up, invokes binding set */
+  if (!handled)
+    handled = GTK_WIDGET_CLASS (parent_class)->key_press_event (widget, event);
 
   return handled;
 }
@@ -7068,9 +7086,9 @@ gtk_window_free_key_hash (GtkWindow *window)
 
 /**
  * gtk_window_activate_key:
- * @window: a #GtkWindow
- * @event: a #GdkEventKey
- * 
+ * @window:  a #GtkWindow
+ * @event:   a #GdkEventKey
+ *
  * Activates mnemonics and accelerators for this #GtkWindow. This is normally
  * called by the default ::key_press_event handler for toplevel windows,
  * however in some cases it may be useful to call this directly when
index 0b0c163b426bdc8f154f8cf035153b1b742f9884..da6b67a80b0f80efcc024708484b712f60ac7132 100644 (file)
@@ -287,6 +287,8 @@ GdkModifierType gtk_window_get_mnemonic_modifier (GtkWindow *window);
 
 gboolean gtk_window_activate_key          (GtkWindow        *window,
                                           GdkEventKey      *event);
+gboolean gtk_window_propagate_key_event   (GtkWindow        *window,
+                                          GdkEventKey      *event);
 
 void     gtk_window_present       (GtkWindow *window);
 void     gtk_window_iconify       (GtkWindow *window);